// 这里的Vue为Vue对象(非创建出来的实例)，vm为main.js中“Vue.use(httpInterceptor, app)”这一句的第二个参数，
// 为一个Vue的实例，也即每个页面的"this"
// 如果需要了解这个install方法是什么，请移步：https://uviewui.com/components/vueUse.html
const install = (Vue, vm) => {

	// 此为自定义配置参数，具体参数见上方说明
	Vue.prototype.$u.http.setConfig({
		baseUrl: 'http://manymerchantshop.com/api',
		loadingText: '努力加载中~',
		showLoading: false,
		loadingTime: 1000,
		loadingMask: false,
		// originalData: true,
		// 设置自定义头部content-type
		// header: {
		// 	'content-type': 'xxx'
		// }
		// ......
	});

	// 请求拦截部分，如配置，每次请求前都会执行
	Vue.prototype.$u.http.interceptor.request = (config) => {
		// 引用token
		// 方式一，存放在vuex的token，假设使用了uView封装的vuex方式
		// 见：https://uviewui.com/components/globalVariable.html
		// config.header.token = vm.token;

		// 方式二，如果没有使用uView封装的vuex方法，那么需要使用$store.state获取
		// config.header.token = vm.$store.state.token;

		// 方式三，如果token放在了globalData，通过getApp().globalData获取
		// config.header.token = getApp().globalData.username;

		// 方式四，如果token放在了Storage本地存储中，拦截是每次请求都执行的
		// 所以哪怕您重新登录修改了Storage，下一次的请求将会是最新值
		const token = uni.getStorageSync('token');
		// config.header.Authorization = token;
		config.header.Authorization = 'Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsImp0aSI6IjFjNDQxZWI1ZmFkMGQ4MzM3N2NkYjZjOTAxNmYzYjA1YjcxYWZjOTU3NzQwNWJiMTdiNTA1NDdlZWUwOTVjNjNkMmU4NmVkYWEyZDBmODMzIn0.eyJhdWQiOiIxIiwianRpIjoiMWM0NDFlYjVmYWQwZDgzMzc3Y2RiNmM5MDE2ZjNiMDViNzFhZmM5NTc3NDA1YmIxN2I1MDU0N2VlZTA5NWM2M2QyZTg2ZWRhYTJkMGY4MzMiLCJpYXQiOjE2MzgxODY5MjUsIm5iZiI6MTYzODE4NjkyNSwiZXhwIjoxNjY5NzIyOTI1LCJzdWIiOiIxIiwic2NvcGVzIjpbInVzZXItYXBpIl19.LKVOcD0W-3IlBiShx53X3KYTqas6oq0rs3O4ZXBNxARXjLmOt7NQ0QTC09x50XNZbvK8OtUSvE5jF4Xf-LDOMGLh-D8TDDO1ZxBPIKGjk7jG-cPq1D3J9-V49Z3u2hg0QSlXuwmBiVpmX1nob3-yW_4HuZn8ZT8XR9Z8sXDq6q9JmwfnpkmR5FwkNFlkDLVwiBvyEDIyMj-96c2AMoWl00zKyhvj7Uy6rn9ihnAKRc_qt2rS6VHmYNF_uJZpuRsGwPMAfrt_whFq09bFnkYERoWETlp2k3MMG7Ix8ipnsy0DLNfELSb2J3RDaaP4c307Zwvze2WJ9FasK4yhyoRXGsrWNxMxz1n4TiI-17RY3NMzC2e-qMz98FeMeoM5aqiqH1e4eSF-tttdPyzaFcwgUyb0LLKrg6CGqZ1tPoYEucgr9BL63Z5OBNnZhZVDPFmihBGL3hVT0yPCldUDA3fpWGKA4ovdyM4X4M5DKs2pup9e7qst7nfJc6aEtwD80mmrL7yEX7fJ3-rcpkGDDndczMKG6rMsd3icox9P5Kp4AJtovmsjbbPoUjvTUwXCjpASHeB3_4QB_Ox9GpUZmrnxqS3P0VSpAr9hD4Ddu-u2sIoSqrpgmsykSxIGJebKHRbb-IxObMUuruMDDK9KjvCmfOpnNY4fMmbw5uBMsh6aDkE';
		
		

		// config.header.Token = 'xxxxxx';

		// 可以对某个url进行特别处理，此url参数为this.$u.get(url)中的url值
		// if (config.url == '/user/login') config.header.noToken = true;
		// 最后需要将config进行return
		return config;
		// 如果return一个false值，则会取消本次请求
		// if(config.url == '/user/rest') return false; // 取消某次请求
	}

	// 响应拦截，如配置，每次请求结束都会执行本方法
	Vue.prototype.$u.http.interceptor.response = (res) => {
		if (res.code == 200) {
			// res为服务端返回值，可能有code，result等字段
			// 这里对res.result进行返回，将会在this.$u.post(url).then(res => {})的then回调中的res的到
			// 如果配置了originalData为true，请留意这里的返回值
			return res;
		} else if (res.code == 401) {
			// 假设201为token失效，这里跳转登录
			
			return false;
		} else if(res.code == 422) {
			uni.showModal({
				title: '提示',
				content: res.message,
				confirmColor: '#0C6EFD'
			});
			return false;
		} else if(res.code == 500) {
			uni.showModal({
				title: '提示',
				content: res.message,
				confirmColor: '#0C6EFD'
			});
			return false;
		} else {
			// 如果返回false，则会调用Promise的reject回调，
			// 并将进入this.$u.post(url).then().catch(res=>{})的catch回调中，res为服务端的返回值
			return false;
		}
	}
}

export default {
	install
}
